home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / gfx / misc / gnuplot-3.7src.lha / gnuplot-3.7src / gnuplot-3.7.lha / gnuplot-3.7 / term / tgif.trm < prev    next >
Text File  |  1998-12-16  |  52KB  |  1,508 lines

  1. /*{{{}}}*/
  2. /***************************************************************************/
  3. /*                                                                         */
  4. /* $Id: tgif.trm,v 1.66 1998/04/14 00:18:10 drd Exp $                     */
  5. /*                                                                         */
  6. /***************************************************************************/
  7. /* GNUPLOT - tgif.trm                                                      */
  8.  
  9.  
  10. /*[
  11.  * Copyright 1990 - 1993, 1998
  12.  *
  13.  * Permission to use, copy, and distribute this software and its
  14.  * documentation for any purpose with or without fee is hereby granted,
  15.  * provided that the above copyright notice appear in all copies and
  16.  * that both that copyright notice and this permission notice appear
  17.  * in supporting documentation.
  18.  *
  19.  * Permission to modify the software is granted, but not the right to
  20.  * distribute the complete modified source code.  Modifications are to
  21.  * be distributed as patches to the released version.  Permission to
  22.  * distribute binaries produced by compiling modified sources is granted,
  23.  * provided you
  24.  *   1. distribute the corresponding source modifications from the
  25.  *    released version in the form of a patch file along with the binaries,
  26.  *   2. add special version identification to distinguish your version
  27.  *    in addition to the base release version number,
  28.  *   3. provide your name and address as the primary contact for the
  29.  *    support of your modified version, and
  30.  *   4. retain our contact information in regard to use of the base
  31.  *    software.
  32.  * Permission to distribute the released version of the source code along
  33.  * with corresponding source modifications in the form of a patch file is
  34.  * granted with same provisions 2 through 4 for binary distributions.
  35.  *
  36.  * This software is provided "as is" without express or implied warranty
  37.  * to the extent permitted by applicable law.
  38. ]*/
  39.  
  40. /*                                       */
  41. /* This file is included by ../term.c.                                     */
  42. /*                                                                         */
  43. /* This terminal driver supports:                                          */
  44. /*     TGIF                                                                */
  45. /*                                                                         */
  46. /* AUTHORS:                                                                */
  47. /*  Werner Geppert and Andreas Kuhlewind                                   */
  48. /*  March, 21st 1995                                                       */
  49. /*                                                                         */
  50. /* send your comments or suggestions to werner@mez.ruhr-uni-bochum.de      */
  51. /*                                                                         */
  52. /*                                                                         */
  53. /* MODIFIED May, 11st 1997 by NOVÁK Levente (novakl@tigris.klte.hu):       */
  54. /*                                                                         */
  55. /*          - Modified the default linewidth for borders from 3 to 2       */
  56. /*          - Modified the default size of markers' bounding box           */
  57. /*            to allow nicer shapes                                        */
  58. /*          - Slightly modified the markers and added several new ones,    */
  59. /*            now we have 64 different pointtypes, the same as for the     */
  60. /*            PostScript terminal                                          */
  61. /*          - I left the %.1f format for pixel positions, but I think      */
  62. /*            Tgif does only calculate with integer positions              */
  63.  
  64.  
  65. /***************************************************************************/
  66.  
  67. /*}}}  */
  68. /***************************************************************************/
  69. #include "driver.h"
  70.  
  71. #ifdef TERM_REGISTER
  72. register_term(tgif)
  73. #endif
  74.  
  75. #ifdef TERM_PROTO
  76. TERM_PUBLIC void TGIF_options __PROTO((void));
  77. TERM_PUBLIC void TGIF_init __PROTO((void));
  78. TERM_PUBLIC void TGIF_reset __PROTO((void));
  79. TERM_PUBLIC void TGIF_text __PROTO((void));
  80. TERM_PUBLIC void TGIF_graphics __PROTO((void));
  81. TERM_PUBLIC void TGIF_move __PROTO((unsigned int ux, unsigned int uy));
  82. TERM_PUBLIC void TGIF_vector __PROTO((unsigned int ux, unsigned int uy));
  83. TERM_PUBLIC void TGIF_linetype __PROTO((int linetype));
  84. TERM_PUBLIC void TGIF_put_text __PROTO((unsigned int ux, unsigned int uy, char *str));    /* ref point and text */
  85. TERM_PUBLIC int TGIF_text_angle __PROTO((int ang));
  86. TERM_PUBLIC int TGIF_justify_text __PROTO((enum JUSTIFY mode));
  87. TERM_PUBLIC void TGIF_point __PROTO((unsigned int ux, unsigned int uy, int number));
  88. TERM_PUBLIC void TGIF_arrow __PROTO((unsigned int sx, unsigned int sy, unsigned int ex, unsigned int ey, TBOOLEAN head));
  89. TERM_PUBLIC int TGIF_set_font __PROTO((char *font));
  90. TERM_PUBLIC void TGIF_set_pointsize __PROTO((double size));
  91. /*}}}  */
  92. /* default length for static strings */
  93. #define TGIF_STRLEN_MAX 255
  94.  
  95. /* standard x/y plot size in portrait mode */
  96. #define TGIF_XMAX 950
  97. #define TGIF_YMAX 634
  98.  
  99. /* total available plotting area */
  100. #define TGIF_XTOT 950
  101. #define TGIF_YTOT 1400
  102.  
  103. /* Offset  */
  104. #define TGIF_XOFF 50
  105. #define TGIF_YOFF 50
  106.  
  107. #define TGIF_XSHIFT 1030    /* 80 points skip */
  108. #define TGIF_YSHIFT 714
  109.  
  110. #define TGIF_VCHAR 18        /* default is 18 pt       */
  111. #define TGIF_HCHAR (18*6/10)
  112.  
  113. #define TGIF_VTIC (TGIF_YMAX/80)
  114. #define TGIF_HTIC (TGIF_YMAX/80)
  115.  
  116.  
  117. #define TGIF_MAXPOLY 100
  118. /*}}}  */
  119. #define GOT_TGIF_PROTO
  120. #endif
  121.  
  122. #ifndef TERM_PROTO_ONLY
  123.  
  124. #ifdef TERM_BODY
  125. /* tgif driver by Werner Geppert, werner@mez.ruhr-uni-bochum.de */
  126. /***************************************************************************/
  127. /* Variables:                                                              */
  128. static unsigned int uLastTgifX, uLastTgifY;    /* last Coordinate         */
  129.  
  130. static unsigned int uActNr;    /* current elementnumber                   */
  131. static unsigned int uActPage;    /* current pagenumber                      */
  132. static unsigned int uActResolution;    /* resolution in percent           */
  133. static unsigned int uActZoom;    /* zoom factor                             */
  134. static unsigned int uActAngle;    /* current textangle                       */
  135. static unsigned int uActThick;    /* actual linethickness                    */
  136. static unsigned int uActPointSize;    /* point size                      */
  137. static unsigned int uActStyle;    /* actual linestyle                        */
  138. static unsigned int uActJust;    /* actual textjustification                */
  139. static unsigned int uXshift;    /* actual shift x                          */
  140. static unsigned int uYshift;    /* actual shift y                          */
  141. static unsigned int uTgifPlotCount;    /* counts number of plots          */
  142. static unsigned int uTgifPlotRow, uTgifPlotCol;        /* actual plot row and col   */
  143. static unsigned int uTgif_win_horiz, /* number of plots in x and  */ uTgif_win_verti;    /*      y direction [x,y]         */
  144.  
  145.  
  146.  
  147. static char sActColor[TGIF_STRLEN_MAX];        /* current color         */
  148. static unsigned int uDefaultFontSize;    /* default font size         */
  149. static unsigned int uActFontSize;    /* current font size         */
  150. static char sDefaultFont[TGIF_STRLEN_MAX];    /* default font          */
  151. static char sActFont[TGIF_STRLEN_MAX];    /* current font          */
  152. /* static char          sActPointString[TGIF_STRLEN_MAX]; HBB: unused */
  153.  
  154. static TBOOLEAN TgifSolid = FALSE;
  155. static TBOOLEAN TgifPortrait = TRUE;
  156.  
  157. static unsigned int uTgifPlotsPerPage = 1;
  158. static unsigned int uTextAngle[] =
  159. {0, 3};
  160.  
  161. /*
  162.  * 10 different pointtypes need 10 different linetypes
  163.  */
  164.  
  165. /* NL: Modified first value to 2 from 3 */
  166. static unsigned int uLineThick[] = { 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
  167. static unsigned int uLineStyle[] = { 0, 5, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0 };
  168. static char *psColors[] =
  169. {
  170.  "black", "black",        /* border and x/y-zero-axes       */
  171.  "red", "green", "blue", "magenta", "cyan", "yellow",
  172.  "DarkSeaGreen", "HotPink", "black", "coral"};
  173.  
  174. #if 0                /* HBB: unused */
  175. static char *psFonts[] =
  176. {"Times-Roman", "Courier", "Helvetica", "NewCenturySchlbk-Roman", "Symbol", NULL};
  177.  
  178. static unsigned int psFontSizes[] =
  179. { 8, 10, 11, 12, 14, 17, 18, 20, 24, 25, 34, 40, 45, 50 };
  180. #endif
  181.  
  182. static int iTgifPolyCount;
  183. static unsigned int uBuffX[TGIF_MAXPOLY], uBuffY[TGIF_MAXPOLY];
  184.  
  185. enum eState {
  186.     NEWPOLY = 100, INPOLY
  187. };
  188. static enum eState eTgifState = NEWPOLY;
  189.  
  190. static void TGIF_flush_poly __PROTO((void));
  191.  
  192.  
  193.  
  194. /*}}}  */
  195. /***************************************************************************/
  196. static void TGIF_flush_poly()
  197. {
  198.     int i;
  199.  
  200.  
  201.     if (eTgifState == INPOLY) {
  202.     fprintf(gpoutfile, "poly('%s',%d,[\n\t", sActColor, iTgifPolyCount);
  203.  
  204.     for (i = 0; i < iTgifPolyCount - 1; i++) {
  205.         fprintf(gpoutfile, "%u,%u,", uBuffX[i], uBuffY[i]);
  206.         if ((i + 1) % 8 == 0)
  207.         fputs("\n\t", gpoutfile);
  208.     }
  209.  
  210.     fprintf(gpoutfile, "%u,%u],0,%u,1,%u,0,0,%u,0,8,3,0,[\n]).\n",
  211.         uBuffX[iTgifPolyCount - 1], uBuffY[iTgifPolyCount - 1],
  212.         uActThick, uActNr, uActStyle);
  213.  
  214.     uActNr++;
  215.  
  216.     eTgifState = NEWPOLY;
  217.     iTgifPolyCount = 0;
  218.     if (gpoutfile != (FILE *) NULL)
  219.         fflush(gpoutfile);
  220.     }
  221. }                /* TGIF_flush_poly */
  222. /*}}}  */
  223. /***************************************************************************/
  224. TERM_PUBLIC void TGIF_options()
  225. {
  226.  
  227.     struct value a, b;
  228.     double dscaleH, dscaleV;
  229.  
  230.  
  231.     strcpy(sActFont, "Helvetica");
  232.     strcpy(sDefaultFont, "Helvetica");
  233.     uActFontSize = 18;
  234.     uDefaultFontSize = 18;
  235.     term->v_char = (unsigned int) (uActFontSize);
  236.     term->h_char = (unsigned int) (uActFontSize * 6 / 10);
  237.  
  238.     TgifPortrait = TRUE;
  239.     uTgifPlotsPerPage = 1;
  240.     uTgifPlotRow = 1;
  241.     uTgifPlotCol = 1;
  242.     uTgif_win_horiz = 1;
  243.     uTgif_win_verti = 1;
  244.     uActResolution = 100;
  245.  
  246.  
  247. /*}}}  */
  248.  
  249.     if (!END_OF_COMMAND) {
  250.     if (almost_equals(c_token, "p$ortrait")) {
  251.         TgifPortrait = TRUE;
  252.         c_token++;
  253.     } else if (almost_equals(c_token, "l$andscape")) {
  254.         TgifPortrait = FALSE;
  255.         uActResolution = 140;
  256.         c_token++;
  257.     }
  258.     }
  259. /*}}}  */
  260.  
  261.     if (!END_OF_COMMAND) {
  262.     if (equals(c_token, "[")) {    /* windows specified */
  263.         c_token++;
  264.         if (END_OF_COMMAND) {
  265.         int_error("no. windows: [horizontal,vertical] expected", c_token);
  266.         } else if (!equals(c_token, ",")) {
  267.         uTgif_win_horiz = (int) real(const_express(&a));
  268.         }
  269.         if (!equals(c_token, ","))
  270.         int_error("',' expected", c_token);
  271.         c_token++;
  272.         if (!equals(c_token, "]")) {
  273.         uTgif_win_verti = (int) real(const_express(&a));
  274.         }
  275.         if (!equals(c_token, "]"))
  276.         int_error("expecting ']'", c_token);
  277.         c_token++;
  278.  
  279.         uTgifPlotsPerPage = uTgif_win_verti * uTgif_win_horiz;
  280.  
  281.  
  282.     }
  283.     }
  284. /*}}}  */
  285.  
  286.     if (!END_OF_COMMAND) {
  287.     if (almost_equals(c_token, "s$olid")) {
  288.         TgifSolid = TRUE;
  289.         c_token++;
  290.     } else if (almost_equals(c_token, "d$ashed")) {
  291.         TgifSolid = FALSE;
  292.         c_token++;
  293.     }
  294.     }
  295. /*}}}  */
  296.  
  297.     if (!END_OF_COMMAND && isstring(c_token)) {
  298.     quote_str(sActFont, c_token, MAX_LINE_LEN);
  299.     strcpy(sDefaultFont, sActFont);
  300.     c_token++;
  301.     }
  302.     if (!END_OF_COMMAND) {
  303.     /* We have font size specified */
  304.     uActFontSize = (unsigned int) real(const_express(&b));
  305.     uDefaultFontSize = uActFontSize;
  306.     term->v_char = (unsigned int) (uActFontSize);
  307.     term->h_char = (unsigned int) (uActFontSize * 6 / 10);
  308.     }
  309. /*}}}  */
  310.  
  311.     if (TgifPortrait) {
  312.     dscaleH = (double) 100.0 *(TGIF_XTOT) / (xsize * (TGIF_XMAX + (uTgif_win_horiz - 1) * TGIF_XSHIFT));
  313.     dscaleV = (double) 100.0 *(TGIF_YTOT) / (ysize * (TGIF_YMAX + (uTgif_win_verti - 1) * TGIF_YSHIFT));
  314.     uActResolution = (int) GPMIN(dscaleH, dscaleV);
  315.     switch (uTgif_win_verti) {
  316.     case 1:
  317.         uActZoom = 0;
  318.         break;
  319.  
  320.     case 2:
  321.         uActZoom = 1;
  322.         break;
  323.     default:
  324.         uActZoom = 2;
  325.         break;
  326.  
  327.     }
  328.     } else {
  329.     dscaleH = (double) 100.0 *(TGIF_YTOT) / (xsize * (TGIF_XMAX + (uTgif_win_horiz - 1) * TGIF_XSHIFT));
  330.     dscaleV = (double) 100.0 *(TGIF_XTOT) / (ysize * (TGIF_YMAX + (uTgif_win_verti - 1) * TGIF_YSHIFT));
  331.     uActResolution = (unsigned int) GPMIN(dscaleH, dscaleV);
  332.  
  333.     switch (uTgif_win_verti) {
  334.     case 1:
  335.         uActZoom = 0;
  336.         break;
  337.  
  338.     case 2:
  339.         uActZoom = 1;
  340.         break;
  341.     default:
  342.         uActZoom = 2;
  343.         break;
  344.  
  345.     }
  346.     }
  347.  
  348. /*}}}  */
  349.  
  350.     sprintf(term_options, "%s [%u,%u] %s \"%s\" %u",
  351.         TgifPortrait ? "portrait" : "landscape",
  352.         uTgif_win_horiz, uTgif_win_verti,
  353.         TgifSolid ? "solid" : "dashed",
  354.         sActFont, uActFontSize);
  355. }
  356. /*}}}  */
  357. /***************************************************************************/
  358. TERM_PUBLIC void TGIF_init()
  359. {
  360.  
  361.     if (multiplot) {
  362.     /* uActResolution= TgifPortrait ? (unsigned int)100 : (unsigned int)145 ; */
  363.     uActResolution = (unsigned int) 100;
  364.  
  365.     if (uTgifPlotsPerPage > 1) {
  366.         fputs("warning: using standard multiplot\n", stderr);
  367.         uTgifPlotsPerPage = 1;
  368.     }
  369.     uActZoom = 1;
  370.     }
  371.     fprintf(gpoutfile, "\
  372. %%TGIF 2.15-p7\n\
  373. state(%d,30,%u,0,0,%u,16,1,9,1,1,0,0,0,0,1,0,'%s',0,%u,0,0,1,10,0,0,1,1,0,16,0,0,1,1,1).\n\
  374. %%\n%% @(#)$Header: /export/home/cheetah/ddenholm/cvsroot/gnuplot/term/tgif.trm,v 1.66 1998/04/14 00:18:10 drd Exp $\n%% %%W%%\n%%\n\
  375. page(1,\"\").\n",
  376.         TgifPortrait ? 0 : 1, uActResolution, uActZoom, sActFont, uActFontSize);
  377.     eTgifState = NEWPOLY;
  378.     iTgifPolyCount = 0;
  379.     uTgifPlotCount = 0;
  380.     uActPage = 1;
  381.  
  382. }                /* TGIF_init */
  383. /*}}}  */
  384. /***************************************************************************/
  385. TERM_PUBLIC void TGIF_graphics()
  386. {
  387.  
  388.     TGIF_flush_poly();
  389.  
  390.     if (multiplot) {
  391.  
  392.     term->xmax = (TgifPortrait) ? TGIF_XTOT : TGIF_YTOT;
  393.     term->ymax = (TgifPortrait) ? TGIF_YTOT : TGIF_XTOT;
  394.     uLastTgifX = (TgifPortrait) ? TGIF_XOFF : TGIF_YOFF;
  395.     uLastTgifY = (TgifPortrait) ? TGIF_YTOT + TGIF_YOFF : TGIF_XTOT + TGIF_XOFF;
  396.  
  397.     uYshift = uLastTgifY;
  398.     uXshift = uLastTgifX;
  399.  
  400.     } else {
  401.     if (uTgifPlotCount < uTgifPlotsPerPage)
  402.         uTgifPlotCount++;
  403.     else {
  404.         fprintf(stderr, "error: number of plots > plots per page\n");
  405.         return;
  406.     }
  407.  
  408.     uXshift = (unsigned int) TGIF_XOFF *100 / uActResolution + (xsize * (uTgifPlotCol - 1) * TGIF_XSHIFT);
  409.     uYshift = (unsigned int) TGIF_YOFF *100 / uActResolution + (ysize * (TGIF_YMAX +
  410.                                          (uTgifPlotRow - 1) * TGIF_YSHIFT));
  411.  
  412.     if (uTgifPlotCount % uTgif_win_horiz == 0) {
  413.         uTgifPlotCol = 1;
  414.         uTgifPlotRow++;
  415.     } else {
  416.         uTgifPlotCol++;
  417.     }
  418.  
  419.     uLastTgifX = uXshift;
  420.     uLastTgifY = uYshift;
  421.  
  422.     }
  423.  
  424.  
  425.  
  426.  
  427.  
  428. /* default settings for each plot */
  429.     iTgifPolyCount = 0;
  430.     uActNr = 0;
  431.     uActAngle = 0;
  432.     uActThick = 1;
  433.     uActStyle = 0;
  434.     uActJust = LEFT;
  435.     strcpy(sActColor, psColors[0]);
  436.  
  437.  
  438. }                /* TGIF_graphics */
  439. /*}}}  */
  440. /***************************************************************************/
  441. TERM_PUBLIC void TGIF_text()
  442. {
  443.     TGIF_flush_poly();
  444.  
  445.  
  446. }                /* TGIF_text */
  447.  
  448. /*}}}  */
  449. /***************************************************************************/
  450. TERM_PUBLIC void TGIF_reset()
  451. {
  452.     TGIF_flush_poly();
  453.     iTgifPolyCount = 0;
  454.     uTgifPlotCount = 0;
  455.     uTgifPlotRow = 1;
  456.     uTgifPlotCol = 1;
  457.  
  458.  
  459.     if (gpoutfile != (FILE *) NULL)
  460.     fflush(gpoutfile);
  461.  
  462. }                /* TGIF_reset */
  463. /*}}}  */
  464. /***************************************************************************/
  465. TERM_PUBLIC void TGIF_linetype(linetype)
  466. int linetype;
  467. {
  468.     unsigned int ult;
  469.  
  470.  
  471.     TGIF_flush_poly();
  472.  
  473.  
  474.     if (linetype >= 0)
  475.     ult = 2 + linetype % 10;
  476.     else
  477.     ult = linetype + 2;
  478.  
  479.     strcpy(sActColor, psColors[ult]);
  480.     uActThick = uLineThick[ult];
  481.     if (!TgifSolid)
  482.     uActStyle = uLineStyle[ult];
  483.     else {
  484.     if (ult == 1)        /* grid */
  485.         uActStyle = uLineStyle[ult];
  486.     else
  487.         uActStyle = uLineStyle[2];
  488.  
  489.     }
  490.  
  491. }                /* TGIF_linetype */
  492. /*}}}  */
  493. /***************************************************************************/
  494. TERM_PUBLIC void TGIF_move(ux, uy)
  495. unsigned int ux, uy;
  496. {
  497.  
  498.     uLastTgifX = ux + uXshift;
  499.     uLastTgifY = uYshift - uy;
  500.  
  501.     if (eTgifState == INPOLY)
  502.     TGIF_flush_poly();
  503.  
  504.  
  505.  
  506. }                /* TGIF_move */
  507. /*}}}  */
  508. /***************************************************************************/
  509. TERM_PUBLIC void TGIF_vector(ux, uy)
  510. unsigned int ux, uy;
  511. {
  512.  
  513.     ux = ux + uXshift;
  514.     uy = uYshift - uy;
  515.  
  516.  
  517.  
  518.     if (eTgifState == NEWPOLY) {
  519.     uBuffX[0] = uLastTgifX;
  520.     uBuffY[0] = uLastTgifY;
  521.     iTgifPolyCount = 1;
  522.     eTgifState = INPOLY;
  523.     }
  524.     uBuffX[iTgifPolyCount] = ux;
  525.     uBuffY[iTgifPolyCount] = uy;
  526.     uLastTgifX = ux;
  527.     uLastTgifY = uy;
  528.     iTgifPolyCount++;
  529.     eTgifState = INPOLY;
  530.  
  531.     if (iTgifPolyCount == TGIF_MAXPOLY) {
  532.     TGIF_flush_poly();
  533.  
  534.     }
  535. }                /* TGIF_vector */
  536. /*}}}  */
  537. /***************************************************************************/
  538. TERM_PUBLIC void TGIF_arrow(sx, sy, ex, ey, head)
  539. unsigned int sx, sy, ex, ey;
  540. TBOOLEAN head;
  541. {
  542.  
  543.     TGIF_flush_poly();
  544.  
  545.     sx = sx + uXshift;
  546.     ex = ex + uXshift;
  547.     sy = uYshift - sy;
  548.     ey = uYshift - ey;
  549.  
  550.  
  551.     if (head) {
  552.     fprintf(gpoutfile, "poly('%s',%d,[\n\t%u,%u,%u,%u],1,%u,1,%u,0,0,%u,0,8,3,0,[\n]).\n",
  553.         sActColor, 2, sx, sy, ex, ey, uActThick, uActNr, uActStyle);
  554.     } else {
  555.     fprintf(gpoutfile, "poly('%s',%d,[\n\t%u,%u,%u,%u],1,%u,1,%u,0,0,%u,0,8,3,0,[\n]).\n",
  556.         sActColor, 2, sx, sy, ex, ey, uActThick, uActNr, uActStyle);
  557.     }
  558.  
  559.     uActNr++;
  560.  
  561.  
  562.  
  563.     uLastTgifX = ex;
  564.     uLastTgifY = ey;
  565.  
  566. }                /* TGIF_arrow */
  567. /*}}}  */
  568. /***************************************************************************/
  569. TERM_PUBLIC void TGIF_put_text(ux, uy, str)
  570. unsigned int ux, uy;
  571. char *str;
  572. {
  573.  
  574.     unsigned int x, y;
  575.     struct termentry *t = term;
  576.  
  577.     TGIF_flush_poly();
  578.  
  579.     x = ux + uXshift;
  580.     y = uYshift - uy - t->v_char / 2;
  581.  
  582.  
  583.  
  584.     if (strlen(str) == 0)
  585.     return;
  586.  
  587.  
  588.     fprintf(gpoutfile,
  589.         "text('%s',%u,%u,'%s',0,%u,1,%u,%u,1,55,119,%u,0,15,4,0,0,0,0,[\n\t\"%s\"]).\n",
  590.         sActColor, x, y, sActFont, uActFontSize, uActJust, uActAngle, uActNr, str);
  591.  
  592.     uActNr += 2;
  593.  
  594.     /* reset font size and font, they might have been changed */
  595.     uActFontSize = uDefaultFontSize;
  596.     strcpy(sActFont, sDefaultFont);
  597.  
  598. }                /* TGIF_put_text */
  599. /*}}}  */
  600. /***************************************************************************/
  601. TERM_PUBLIC int TGIF_text_angle(ang)
  602. int ang;
  603. {
  604.     uActAngle = uTextAngle[ang];    /* 0=waag.  1=senkrecht */
  605.     return (TRUE);
  606. }                /* TGIF_text_angle */
  607.  
  608. /*}}}  */
  609. /***************************************************************************/
  610. TERM_PUBLIC int TGIF_justify_text(mode)
  611. enum JUSTIFY mode;
  612. {
  613.     uActJust = mode;
  614.     return (TRUE);
  615. }                /* TGIF_justify_text */
  616.  
  617. /*}}}  */
  618. /***************************************************************************/
  619. TERM_PUBLIC void TGIF_point(ux, uy, number)
  620. unsigned int ux, uy;
  621. int number;
  622. {
  623.     double p;            /* all pointtypes fit in a (x +/-p)x(y +/-p) box */
  624.  
  625.     double x, y;
  626.  
  627.  
  628.  
  629.     x = (double) (ux + uXshift);
  630.     y = (double) (uYshift - uy);
  631.  
  632.     p = pointsize * 8.0;    /* NL: Increased the bounding box (p value) from 4.0 to 8.0 */
  633.     if (p == (double) 0.0)
  634.     p = 0.1;
  635.  
  636.     TGIF_flush_poly();
  637.  
  638.     if (number != -1)
  639.     number = number % 63;
  640.     switch (number) {
  641.     case -1:
  642. /* HBB: corrected format string, shuts up gcc -Wall */
  643.     fprintf(gpoutfile, "poly('%s',2,[\n\t%.1f,%.1f,%.1f,%.1f],0,1,1,%u,0,0,0,0,8,3,0,[\n]).\n",
  644.         sActColor, x, y, x + 1, y + 1, uActNr++);
  645.     break;
  646.     case 0:
  647.     /* cross */
  648.     /* taking thickness 2 for cross & plus & star */
  649.     fprintf(gpoutfile, "\
  650. group([\n\
  651. poly('%s',2,[\n\t%.1f,%.1f,%.1f,%.1f],0,2,1,%u,0,0,0,0,8,3,0,[\n]).\n\
  652. poly('%s',2,[\n\t%.1f,%.1f,%.1f,%.1f],0,2,1,%u,0,0,0,0,8,3,0,[\n]).\n",
  653.         sActColor, x - p, y - p, x + p, y + p, uActNr+1,
  654.         sActColor, x - p, y + p, x + p, y - p, uActNr+2);
  655.     uActNr += 4;
  656.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  657.     break;
  658.     /*}}}  */
  659.     case 1:
  660.     /* plus */
  661.     /* taking thickness 2 for cross & plus & star */
  662.     fprintf(gpoutfile, "\
  663. group([\n\
  664. poly('%s',2,[\n\t%.1f,%.1f,%.1f,%.1f],0,2,1,%u,0,0,0,0,8,3,0,[\n]),\n\
  665. poly('%s',2,[\n\t%.1f,%.1f,%.1f,%.1f],0,2,1,%u,0,0,0,0,8,3,0,[\n])\n",
  666.         sActColor, x, y - p - 1, x, y + p + 1, uActNr+1,
  667.         sActColor, x - p - 1, y, x + p + 1, y, uActNr+2);
  668.     uActNr += 4;
  669.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  670.     break;
  671.     /*}}}  */
  672.     case 2:
  673.     /* star */
  674.     /* taking thickness 2 for cross & plus & star */
  675.     fprintf(gpoutfile, "group([\n");
  676.     fprintf(gpoutfile, "poly('%s',2,[\n\t%.1f,%.1f,%.1f,%.1f],0,2,1,%u,0,0,0,0,8,3,0,[\n]),\n",
  677.         sActColor, x, y - p - 1, x, y + p + 1, uActNr++);
  678.     fprintf(gpoutfile, "poly('%s',2,[\n\t%.1f,%.1f,%.1f,%.1f],0,2,1,%u,0,0,0,0,8,3,0,[\n])\n",
  679.         sActColor, x - p - 1, y, x + p + 1, y, uActNr++);
  680.     fprintf(gpoutfile, "poly('%s',2,[\n\t%.1f,%.1f,%.1f,%.1f],0,2,1,%u,0,0,0,0,8,3,0,[\n]).\n",
  681.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  682.     fprintf(gpoutfile, "poly('%s',2,[\n\t%.1f,%.1f,%.1f,%.1f],0,2,1,%u,0,0,0,0,8,3,0,[\n]).\n",
  683.         sActColor, x - p, y + p, x + p, y - p, uActNr++);
  684.     uActNr += 4;
  685.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  686.     break;
  687.     /*}}}  */
  688.     case 3:
  689.     /* box */
  690.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  691.         sActColor, x - p, y - p, x + p, y + p, uActNr);
  692.     uActNr++;
  693.     break;
  694.     /*}}}  */
  695.     case 4:
  696.     /* filled box */
  697.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
  698.         sActColor, x - p, y - p, x + p, y + p, uActNr);
  699.     uActNr++;
  700.     break;
  701.     /*}}}  */
  702.     case 5:
  703.     /* circle */
  704.     fprintf(gpoutfile, "oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  705.         sActColor, x - p, y - p, x + p, y + p, uActNr);
  706.     uActNr++;
  707.     break;
  708.     /*}}}  */
  709.     case 6:
  710.     /* filled circle */
  711.     fprintf(gpoutfile, "oval('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
  712.         sActColor, x - p, y - p, x + p, y + p, uActNr);
  713.     uActNr++;
  714.     break;
  715.     /*}}}  */
  716.     case 7:
  717.     /* triangle up */
  718.     fprintf(gpoutfile,
  719.         "polygon('%s',4,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  720.         sActColor, x, y - p, x + p, y + 0.75 * p, x - p, y + 0.75 * p, x, y - p, uActNr);
  721.     uActNr++;
  722.     break;
  723.     /*}}}  */
  724.     case 8:
  725.     /* filled triangle up */
  726.     fprintf(gpoutfile,
  727.         "polygon('%s',4,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  728.         sActColor, x, y - p, x + p, y + 0.75 * p, x - p, y + 0.75 * p, x, y - p, uActNr);
  729.     uActNr++;
  730.     break;
  731.     /*}}}  */
  732.     case 9:
  733.     /* triangle down */
  734.     fprintf(gpoutfile,
  735.         "polygon('%s',4,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  736.         sActColor, x, y + p, x - p, y - 0.75 * p, x + p, y - 0.75 * p, x, y + p, uActNr);
  737.     uActNr++;
  738.     break;
  739.     /*}}}  */
  740.     case 10:
  741.     /* filled triangle down */
  742.     fprintf(gpoutfile,
  743.         "polygon('%s',4,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  744.         sActColor, x, y + p, x - p, y - 0.75 * p, x + p, y - 0.75 * p, x, y + p, uActNr);
  745.     uActNr++;
  746.     break;
  747.     /*}}}  */
  748.     case 11:
  749.     /* diamond */
  750.     fprintf(gpoutfile,
  751.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  752.         sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
  753.     uActNr++;
  754.     break;
  755.     /*}}}  */
  756.     case 12:
  757.     /* filled diamond */
  758.     fprintf(gpoutfile,
  759.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  760.         sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
  761.     uActNr++;
  762.     break;
  763.     /*}}}  */
  764.     case 13:
  765.     /* pentagon */
  766.     fprintf(gpoutfile,
  767.         "polygon('%s',6,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  768.         sActColor, x, y - p, x + p, y - p / 4, x + 0.625 * p, y + p, x - 0.625 * p, y + p,
  769.         x - p, y - p / 4, x, y - p, uActNr);
  770.     uActNr++;
  771.     break;
  772.     /*}}}  */
  773.     case 14:
  774.     /* filled pentagon */
  775.     fprintf(gpoutfile,
  776.         "polygon('%s',6,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  777.         sActColor, x, y - p, x + p, y - p / 4, x + 0.625 * p, y + p, x - 0.625 * p, y + p,
  778.         x - p, y - p / 4, x, y - p, uActNr);
  779.     uActNr++;
  780.     break;
  781.     /*}}}  */
  782.     case 15:
  783.     /* circle1 */
  784.     fprintf(gpoutfile, "group([\n");
  785.     fprintf(gpoutfile, "oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  786.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  787.     fprintf(gpoutfile,
  788.         "arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,4480,2560,%u,0,0,8,3,0,[\n]).\n",
  789.         sActColor, x - p, y - p, x, y, x + p * 0.342, y - p * 0.94, x - p * 0.342, y - p *
  790.         0.94, 2 * p, 2 * p, uActNr++);
  791.     uActNr += 2;
  792.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  793.     break;
  794.     /*}}}  */
  795.     case 16:
  796.     /* circle2 */
  797.     fprintf(gpoutfile, "group([\n");
  798.     fprintf(gpoutfile, "oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  799.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  800.     fprintf(gpoutfile,
  801.         "arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,0,5760,%u,0,0,8,3,0,[\n]).\n",
  802.         sActColor, x - p, y - p, x, y, x + p, y, x, y - p, 2 * p, 2 * p, uActNr++);
  803.     uActNr += 2;
  804.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  805.     break;
  806.     /*}}}  */
  807.     case 17:
  808.     /* circle3 */
  809.     fprintf(gpoutfile, "group([\n");
  810.     fprintf(gpoutfile, "oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  811.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  812.     fprintf(gpoutfile,
  813.         "arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,5760,5760,%u,0,0,8,3,0,[\n]).\n",
  814.         sActColor, x - p, y - p, x, y, x, y - p, x - p, y, 2 * p, 2 * p, uActNr++);
  815.     uActNr += 2;
  816.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  817.     break;
  818.     /*}}}  */
  819.     case 18:
  820.     /* circle4 */
  821.     fprintf(gpoutfile, "group([\n");
  822.     fprintf(gpoutfile, "oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  823.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  824.     fprintf(gpoutfile,
  825.         "arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,0,11520,%u,0,0,8,3,0,[\n]).\n",
  826.         sActColor, x - p, y - p, x, y, x + p, y, x - p, y, 2 * p, 2 * p, uActNr++);
  827.     uActNr += 2;
  828.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  829.     break;
  830.     /*}}}  */
  831.     case 19:
  832.     /* circle5 */
  833.     fprintf(gpoutfile, "group([\n");
  834.     fprintf(gpoutfile, "oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  835.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  836.     fprintf(gpoutfile,
  837.         "arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,11520,5760,%u,0,0,8,3,0,[\n]).\n",
  838.         sActColor, x - p, y - p, x, y, x - p, y, x, y + p, 2 * p, 2 * p, uActNr++);
  839.     uActNr += 2;
  840.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  841.     break;
  842.     /*}}}  */
  843.     case 20:
  844.     /* circle6 */
  845.     fprintf(gpoutfile, "group([\n");
  846.     fprintf(gpoutfile, "oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  847.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  848.     fprintf(gpoutfile,
  849.         "arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,0,5760,%u,0,0,8,3,0,[\n]).\n",
  850.         sActColor, x - p, y - p, x, y, x + p, y, x, y - p, 2 * p, 2 * p, uActNr++);
  851.     fprintf(gpoutfile,
  852.         "arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,11520,5760,%u,0,0,8,3,0,[\n]).\n",
  853.         sActColor, x - p, y - p, x, y, x - p, y, x, y + p, 2 * p, 2 * p, uActNr++);
  854.     uActNr += 3;
  855.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  856.     break;
  857.     /*}}}  */
  858.     case 21:
  859.     /* circle7 */
  860.     fprintf(gpoutfile, "group([\n");
  861.     fprintf(gpoutfile, "oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  862.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  863.     fprintf(gpoutfile,
  864.         "arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,5760,11520,%u,0,0,8,3,0,[\n]).\n",
  865.         sActColor, x - p, y - p, x, y, x, y - p, x, y + p, 2 * p, 2 * p, uActNr++);
  866.     uActNr += 2;
  867.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  868.     break;
  869.     /*}}}  */
  870.     case 22:
  871.     /* circle8 */
  872.     fprintf(gpoutfile, "group([\n");
  873.     fprintf(gpoutfile, "oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  874.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  875.     fprintf(gpoutfile,
  876.         "arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,0,17280,%u,0,0,8,3,0,[\n]).\n",
  877.         sActColor, x - p, y - p, x, y, x + p, y, x, y + p, 2 * p, 2 * p, uActNr++);
  878.     uActNr += 2;
  879.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  880.     break;
  881.     /*}}}  */
  882.     case 23:
  883.     /* circle9 */
  884.     fprintf(gpoutfile, "group([\n");
  885.     fprintf(gpoutfile, "oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  886.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  887.     fprintf(gpoutfile,
  888.         "arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,17280,5760,%u,0,0,8,3,0,[\n]).\n",
  889.         sActColor, x - p, y - p, x, y, x, y + p, x + p, y, 2 * p, 2 * p, uActNr++);
  890.     uActNr += 2;
  891.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  892.     break;
  893.     /*}}}  */
  894.     case 24:
  895.     /* circle10 */
  896.     fprintf(gpoutfile, "group([\n");
  897.     fprintf(gpoutfile, "oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  898.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  899.     fprintf(gpoutfile,
  900.         "arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,17280,11520,%u,0,0,8,3,0,[\n]).\n",
  901.         sActColor, x - p, y - p, x, y, x, y + p, x, y - p, 2 * p, 2 * p, uActNr++);
  902.     uActNr += 2;
  903.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  904.     break;
  905.     /*}}}  */
  906.     case 25:
  907.     /* circle11 */
  908.     fprintf(gpoutfile, "group([\n");
  909.     fprintf(gpoutfile, "oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  910.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  911.     fprintf(gpoutfile,
  912.         "arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,5760,5760,%u,0,0,8,3,0,[\n]).\n",
  913.         sActColor, x - p, y - p, x, y, x, y - p, x - p, y, 2 * p, 2 * p, uActNr++);
  914.     fprintf(gpoutfile,
  915.         "arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,17280,5760,%u,0,0,8,3,0,[\n]).\n",
  916.         sActColor, x - p, y - p, x, y, x, y + p, x + p, y, 2 * p, 2 * p, uActNr++);
  917.     uActNr += 3;
  918.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  919.     break;
  920.     /*}}}  */
  921.     case 26:
  922.     /* circle12 */
  923.     fprintf(gpoutfile, "group([\n");
  924.     fprintf(gpoutfile, "oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  925.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  926.     fprintf(gpoutfile,
  927.         "arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,17280,17280,%u,0,0,8,3,0,[\n]).\n",
  928.         sActColor, x - p, y - p, x, y, x, y + p, x - p, y, 2 * p, 2 * p, uActNr++);
  929.     uActNr += 2;
  930.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  931.     break;
  932.     /*}}}  */
  933.     case 27:
  934.     /* circle13 */
  935.     fprintf(gpoutfile, "group([\n");
  936.     fprintf(gpoutfile, "oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  937.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  938.     fprintf(gpoutfile,
  939.         "arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,11520,11520,%u,0,0,8,3,0,[\n]).\n",
  940.         sActColor, x - p, y - p, x, y, x - p, y, x + p, y, 2 * p, 2 * p, uActNr++);
  941.     uActNr += 2;
  942.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  943.     break;
  944.     /*}}}  */
  945.     case 28:
  946.     /* circle14 */
  947.     fprintf(gpoutfile, "group([\n");
  948.     fprintf(gpoutfile, "oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  949.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  950.     fprintf(gpoutfile,
  951.         "arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,11520,17280,%u,0,0,8,3,0,[\n]).\n",
  952.         sActColor, x - p, y - p, x, y, x - p, y, x, y - p, 2 * p, 2 * p, uActNr++);
  953.     uActNr += 2;
  954.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  955.     break;
  956.     /*}}}  */
  957.     case 29:
  958.     /* circle15 */
  959.     fprintf(gpoutfile, "group([\n");
  960.     fprintf(gpoutfile, "oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  961.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  962.     fprintf(gpoutfile,
  963.         "arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,5760,17280,%u,0,0,8,3,0,[\n]).\n",
  964.         sActColor, x - p, y - p, x, y, x, y - p, x + p, y, 2 * p, 2 * p, uActNr++);
  965.     uActNr += 2;
  966.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  967.     break;
  968.     /*}}}  */
  969.     case 30:
  970.     /* circle16 */
  971.     fprintf(gpoutfile, "oval('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
  972.         sActColor, x - p, y - p, x + p, y + p, uActNr);
  973.     uActNr++;
  974.     break;
  975.     /*}}}  */
  976.     case 31:
  977.     /* box1 */
  978.     fprintf(gpoutfile, "group([\n");
  979.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  980.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  981.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
  982.         sActColor, x - p / 4, y - p, x + p / 4, y, uActNr++);
  983.     uActNr += 2;
  984.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  985.     break;
  986.     /*}}}  */
  987.     case 32:
  988.     /* box2 */
  989.     fprintf(gpoutfile, "group([\n");
  990.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  991.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  992.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
  993.         sActColor, x, y - p, x + p, y, uActNr++);
  994.     uActNr += 2;
  995.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  996.     break;
  997.     /*}}}  */
  998.     case 33:
  999.     /* box3 */
  1000.     fprintf(gpoutfile, "group([\n");
  1001.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  1002.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  1003.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
  1004.         sActColor, x - p, y - p, x, y, uActNr++);
  1005.     uActNr += 2;
  1006.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1007.     break;
  1008.     /*}}}  */
  1009.     case 34:
  1010.     /* box4 */
  1011.     fprintf(gpoutfile, "group([\n");
  1012.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  1013.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  1014.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
  1015.         sActColor, x - p, y - p, x + p, y, uActNr++);
  1016.     uActNr += 2;
  1017.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1018.     break;
  1019.     /*}}}  */
  1020.     case 35:
  1021.     /* box5 */
  1022.     fprintf(gpoutfile, "group([\n");
  1023.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  1024.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  1025.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
  1026.         sActColor, x - p, y, x, y + p, uActNr++);
  1027.     uActNr += 2;
  1028.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1029.     break;
  1030.     /*}}}  */
  1031.     case 36:
  1032.     /* box6 */
  1033.     fprintf(gpoutfile, "group([\n");
  1034.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  1035.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  1036.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
  1037.         sActColor, x, y - p, x + p, y, uActNr++);
  1038.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
  1039.         sActColor, x - p, y, x, y + p, uActNr++);
  1040.     uActNr += 3;
  1041.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1042.     break;
  1043.     /*}}}  */
  1044.     case 37:
  1045.     /* box7 */
  1046.     fprintf(gpoutfile, "group([\n");
  1047.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  1048.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  1049.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
  1050.         sActColor, x - p, y - p, x, y + p, uActNr++);
  1051.     uActNr += 2;
  1052.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1053.     break;
  1054.     /*}}}  */
  1055.     case 38:
  1056.     /* box8 */
  1057.     fprintf(gpoutfile, "group([\n");
  1058.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  1059.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  1060.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
  1061.         sActColor, x - p, y - p, x + p, y, uActNr++);
  1062.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
  1063.         sActColor, x - p, y, x, y + p, uActNr++);
  1064.     uActNr += 3;
  1065.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1066.     break;
  1067.     /*}}}  */
  1068.     case 39:
  1069.     /* box9 */
  1070.     fprintf(gpoutfile, "group([\n");
  1071.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  1072.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  1073.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
  1074.         sActColor, x, y, x + p, y + p, uActNr++);
  1075.     uActNr += 2;
  1076.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1077.     break;
  1078.     /*}}}  */
  1079.     case 40:
  1080.     /* box10 */
  1081.     fprintf(gpoutfile, "group([\n");
  1082.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  1083.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  1084.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
  1085.         sActColor, x, y - p, x + p, y + p, uActNr++);
  1086.     uActNr += 2;
  1087.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1088.     break;
  1089.     /*}}}  */
  1090.     case 41:
  1091.     /* box11 */
  1092.     fprintf(gpoutfile, "group([\n");
  1093.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  1094.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  1095.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
  1096.         sActColor, x - p, y - p, x, y, uActNr++);
  1097.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
  1098.         sActColor, x, y, x + p, y + p, uActNr++);
  1099.     uActNr += 3;
  1100.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1101.     break;
  1102.     /*}}}  */
  1103.     case 42:
  1104.     /* box12 */
  1105.     fprintf(gpoutfile, "group([\n");
  1106.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  1107.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  1108.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
  1109.         sActColor, x - p, y - p, x + p, y, uActNr++);
  1110.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
  1111.         sActColor, x, y, x + p, y + p, uActNr++);
  1112.     uActNr += 3;
  1113.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1114.     break;
  1115.     /*}}}  */
  1116.     case 43:
  1117.     /* box13 */
  1118.     fprintf(gpoutfile, "group([\n");
  1119.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  1120.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  1121.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
  1122.         sActColor, x - p, y, x + p, y + p, uActNr++);
  1123.     uActNr += 2;
  1124.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1125.     break;
  1126.     /*}}}  */
  1127.     case 44:
  1128.     /* box14 */
  1129.     fprintf(gpoutfile, "group([\n");
  1130.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  1131.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  1132.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
  1133.         sActColor, x, y - p, x + p, y, uActNr++);
  1134.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
  1135.         sActColor, x - p, y, x + p, y + p, uActNr++);
  1136.     uActNr += 3;
  1137.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1138.     break;
  1139.     /*}}}  */
  1140.     case 45:
  1141.     /* box15 */
  1142.     fprintf(gpoutfile, "group([\n");
  1143.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
  1144.         sActColor, x - p, y - p, x + p, y + p, uActNr++);
  1145.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
  1146.         sActColor, x - p, y - p, x, y, uActNr++);
  1147.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
  1148.         sActColor, x - p, y, x + p, y + p, uActNr++);
  1149.     uActNr += 3;
  1150.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1151.     break;
  1152.     /*}}}  */
  1153.     case 46:
  1154.     /* box16 */
  1155.     fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
  1156.         sActColor, x - p, y - p, x + p, y + p, uActNr);
  1157.     uActNr++;
  1158.     break;
  1159.     /*}}}  */
  1160.     case 47:
  1161.     /* diamond1 */
  1162.     fprintf(gpoutfile, "group([\n");
  1163.     fprintf(gpoutfile,
  1164.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1165.         sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
  1166.     fprintf(gpoutfile,
  1167.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1168.         sActColor, x - 0.625 * p, y - 0.375 * p, x - 0.375 * p, y - 0.625 * p, x + p / 8,
  1169.         y - p / 8, x - p / 8, y + p / 8, x - 0.625 * p, y - 0.375 * p, uActNr);
  1170.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1171.     uActNr += 2;
  1172.     break;
  1173.     /*}}}  */
  1174.     case 48:
  1175.     /* diamond2 */
  1176.     fprintf(gpoutfile, "group([\n");
  1177.     fprintf(gpoutfile,
  1178.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1179.         sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
  1180.     fprintf(gpoutfile,
  1181.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1182.         sActColor, x - p / 2, y - p / 2, x, y - p, x + p / 2, y - p / 2, x, y, x - p / 2,
  1183.         y - p / 2, uActNr);
  1184.     uActNr += 2;
  1185.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1186.     break;
  1187.     /*}}}  */
  1188.     case 49:
  1189.     /* diamond3 */
  1190.     fprintf(gpoutfile, "group([\n");
  1191.     fprintf(gpoutfile,
  1192.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1193.         sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
  1194.     fprintf(gpoutfile,
  1195.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1196.         sActColor, x - p, y, x - p / 2, y - p / 2, x, y, x - p / 2, y + p / 2, x - p, y, uActNr);
  1197.     uActNr += 2;
  1198.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1199.     break;
  1200.     /*}}}  */
  1201.     case 50:
  1202.     /* diamond4 */
  1203.     fprintf(gpoutfile, "group([\n");
  1204.     fprintf(gpoutfile,
  1205.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1206.         sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
  1207.     fprintf(gpoutfile,
  1208.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1209.         sActColor, x - p, y, x, y - p, x + p / 2, y - p / 2, x - p / 2, y + p / 2, x - p,
  1210.         y, uActNr);
  1211.     uActNr += 2;
  1212.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1213.     break;
  1214.     /*}}}  */
  1215.     case 51:
  1216.     /* diamond5 */
  1217.     fprintf(gpoutfile, "group([\n");
  1218.     fprintf(gpoutfile,
  1219.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1220.         sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
  1221.     fprintf(gpoutfile,
  1222.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1223.         sActColor, x - p / 2, y + p / 2, x, y, x + p / 2, y + p / 2, x, y + p, x - p / 2,
  1224.         y + p / 2, uActNr);
  1225.     uActNr += 2;
  1226.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1227.     break;
  1228.     /*}}}  */
  1229.     case 52:
  1230.     /* diamond6 */
  1231.     fprintf(gpoutfile, "group([\n");
  1232.     fprintf(gpoutfile,
  1233.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1234.         sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
  1235.     fprintf(gpoutfile,
  1236.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1237.         sActColor, x - p / 2, y - p / 2, x, y - p, x + p / 2, y - p / 2, x, y, x - p / 2,
  1238.         y - p / 2, uActNr);
  1239.     fprintf(gpoutfile,
  1240.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1241.         sActColor, x - p / 2, y + p / 2, x, y, x + p / 2, y + p / 2, x, y + p, x - p / 2,
  1242.         y + p / 2, uActNr);
  1243.     uActNr += 3;
  1244.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1245.     break;
  1246.     /*}}}  */
  1247.     case 53:
  1248.     /* diamond7 */
  1249.     fprintf(gpoutfile, "group([\n");
  1250.     fprintf(gpoutfile,
  1251.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1252.         sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
  1253.     fprintf(gpoutfile,
  1254.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1255.         sActColor, x - p, y, x - p / 2, y - p / 2, x + p / 2, y + p / 2, x, y + p, x - p,
  1256.         y, uActNr);
  1257.     uActNr += 2;
  1258.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1259.     break;
  1260.     /*}}}  */
  1261.     case 54:
  1262.     /* diamond8 */
  1263.     fprintf(gpoutfile, "group([\n");
  1264.     fprintf(gpoutfile,
  1265.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1266.         sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
  1267.     fprintf(gpoutfile,
  1268.         "polygon('%s',7,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1269.         sActColor, x - p, y, x, y - p, x + p / 2, y - p / 2, x, y, x + p / 2, y + p / 2,
  1270.         x, y + p, x - p, y, uActNr);
  1271.     uActNr += 2;
  1272.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1273.     break;
  1274.     /*}}}  */
  1275.     case 55:
  1276.     /* diamond9 */
  1277.     fprintf(gpoutfile, "group([\n");
  1278.     fprintf(gpoutfile,
  1279.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1280.         sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
  1281.     fprintf(gpoutfile,
  1282.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1283.         sActColor, x, y, x + p / 2, y - p / 2, x + p, y, x + p / 2, y + p / 2, x, y, uActNr);
  1284.     uActNr += 2;
  1285.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1286.     break;
  1287.     /*}}}  */
  1288.     case 56:
  1289.     /* diamond10 */
  1290.     fprintf(gpoutfile, "group([\n");
  1291.     fprintf(gpoutfile,
  1292.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1293.         sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
  1294.     fprintf(gpoutfile,
  1295.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1296.         sActColor, x - p / 2, y - p / 2, x, y - p, x + p, y, x + p / 2, y + p / 2, x - p /
  1297.         2, y - p / 2, uActNr);
  1298.     uActNr += 2;
  1299.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1300.     break;
  1301.     /*}}}  */
  1302.     case 57:
  1303.     /* diamond11 */
  1304.     fprintf(gpoutfile, "group([\n");
  1305.     fprintf(gpoutfile,
  1306.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1307.         sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
  1308.     fprintf(gpoutfile,
  1309.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1310.         sActColor, x - p, y, x - p / 2, y - p / 2, x, y, x - p / 2, y + p / 2, x - p, y, uActNr);
  1311.     fprintf(gpoutfile,
  1312.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1313.         sActColor, x, y, x + p / 2, y - p / 2, x + p, y, x + p / 2, y + p / 2, x, y, uActNr);
  1314.     uActNr += 3;
  1315.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1316.     break;
  1317.     /*}}}  */
  1318.     case 58:
  1319.     /* diamond12 */
  1320.     fprintf(gpoutfile, "group([\n");
  1321.     fprintf(gpoutfile,
  1322.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1323.         sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
  1324.     fprintf(gpoutfile,
  1325.         "polygon('%s',7,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1326.         sActColor, x - p, y, x, y - p, x + p, y, x + p / 2, y + p / 2, x, y, x - p / 2, y
  1327.         + p / 2, x - p, y, uActNr);
  1328.     uActNr += 2;
  1329.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1330.     break;
  1331.     /*}}}  */
  1332.     case 59:
  1333.     /* diamond13 */
  1334.     fprintf(gpoutfile, "group([\n");
  1335.     fprintf(gpoutfile,
  1336.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1337.         sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
  1338.     fprintf(gpoutfile,
  1339.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1340.         sActColor, x - p / 2, y + p / 2, x + p / 2, y - p / 2, x + p, y, x, y + p, x - p /
  1341.         2, y + p / 2, uActNr);
  1342.     uActNr += 2;
  1343.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1344.     break;
  1345.     /*}}}  */
  1346.     case 60:
  1347.     /* diamond14 */
  1348.     fprintf(gpoutfile, "group([\n");
  1349.     fprintf(gpoutfile,
  1350.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1351.         sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
  1352.     fprintf(gpoutfile,
  1353.         "polygon('%s',7,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1354.         sActColor, x - p / 2, y - p / 2, x, y - p, x + p, y, x, y + p, x - p / 2, y + p /
  1355.         2, x, y, x - p / 2, y - p / 2, uActNr);
  1356.     uActNr += 2;
  1357.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1358.     break;
  1359.     /*}}}  */
  1360.     case 61:
  1361.     /* diamond15 */
  1362.     fprintf(gpoutfile, "group([\n");
  1363.     fprintf(gpoutfile,
  1364.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1365.         sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
  1366.     fprintf(gpoutfile,
  1367.         "polygon('%s',7,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1368.         sActColor, x - p, y, x - p / 2, y - p / 2, x, y, x + p / 2, y - p / 2, x + p, y,
  1369.         x, y + p, x - p, y, uActNr);
  1370.     uActNr += 2;
  1371.     fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
  1372.     break;
  1373.     /*}}}  */
  1374.     case 62:
  1375.     /* diamond16 */
  1376.     fprintf(gpoutfile,
  1377.         "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
  1378.         sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
  1379.     uActNr++;
  1380.     break;
  1381.     /*}}}  */
  1382.  
  1383.     }                /* switch */
  1384. }                /* TGIF_point */
  1385.  
  1386. /*}}}  */
  1387. /***************************************************************************/
  1388. TERM_PUBLIC void TGIF_set_pointsize(size)
  1389. double size;
  1390. {
  1391.     uActPointSize = size;
  1392. }
  1393.  
  1394. /*}}}  */
  1395. /***************************************************************************/
  1396. TERM_PUBLIC int TGIF_set_font(font) /* Entry font as added by DJL in post.trm */
  1397. char *font;
  1398. {
  1399.     char name[32];
  1400.     int size, sep;
  1401.  
  1402.     sep = strcspn(font, ",");
  1403.     strncpy(name, font, sep);
  1404.     name[sep] = NUL;
  1405.     size = uActFontSize;
  1406.     sscanf(&(font[sep + 1]), "%d", &size);
  1407.     uActFontSize = size;
  1408.     return TRUE;
  1409. }
  1410.  
  1411. /*}}}  */
  1412. /***************************************************************************/
  1413.  
  1414. #endif /* TERM_BODY */
  1415.  
  1416. #ifdef TERM_TABLE
  1417.  
  1418. TERM_TABLE_START(tgif_driver)
  1419. "tgif",
  1420. "TGIF X11 [mode] [x,y] [dashed] [\042font\042 [fontsize]]",
  1421. TGIF_XMAX, TGIF_YMAX, TGIF_VCHAR, TGIF_HCHAR,
  1422. TGIF_VTIC, TGIF_HTIC, TGIF_options, TGIF_init, TGIF_reset,
  1423. TGIF_text, null_scale, TGIF_graphics, TGIF_move, TGIF_vector,
  1424. TGIF_linetype, TGIF_put_text, TGIF_text_angle,
  1425. TGIF_justify_text, TGIF_point, TGIF_arrow, TGIF_set_font,
  1426. TGIF_set_pointsize, TERM_CAN_MULTIPLOT
  1427.  
  1428. TERM_TABLE_END(tgif_driver)
  1429. #undef LAST_TERM
  1430.  
  1431. #define LAST_TERM tgif_driver
  1432.  
  1433. #endif /* TERM_TABLE */
  1434.  
  1435. #endif /* TERM_PROTO_ONLY */
  1436.  
  1437. #ifdef TERM_HELP
  1438. START_HELP(tgif)
  1439. "1 tgif",
  1440. "?commands set terminal tgif",
  1441. "?set terminal tgif",
  1442. "?set term tgif",
  1443. "?terminal tgif",
  1444. "?term tgif",
  1445. "?tgif",
  1446. " Tgif is an X11-based drawing tool---it has nothing to do with GIF.",
  1447. "",
  1448. " The `tgif` driver supports different pointsizes (with `set pointsize`),",
  1449. " different label fonts and font sizes (e.g. `set label \"Hallo\" at x,y font",
  1450. " \"Helvetica,34\"`) and multiple graphs on the page.  The proportions of the",
  1451. " axes are not changed.",
  1452. "",
  1453. " Syntax:",
  1454. "       set terminal tgif {portrait | landscape} {<[x,y]>}",
  1455. "                         {solid | dashed}",
  1456. "                         {\"<fontname>\"} {<fontsize>}",
  1457. "",
  1458. " where <[x,y]> specifies the number of graphs in the x and y directions on the",
  1459. " page, \"<fontname>\" is the name of a valid PostScript font, and <fontsize>",
  1460. " specifies the size of the PostScript font.  Defaults are `portrait`, `[1,1]`,",
  1461. " `dashed`, `\"Helvetica\"`, and `18`.",
  1462. "",
  1463. " The `solid` option is usually prefered if lines are colored, as they often",
  1464. " are in the editor.  Hardcopy will be black-and-white, so `dashed` should be",
  1465. " chosen for that.",
  1466. "",
  1467. " Multiplot is implemented in two different ways.",
  1468. "",
  1469. " The first multiplot implementation is the standard gnuplot multiplot feature:",
  1470. "",
  1471. "       set terminal tgif",
  1472. "       set output \"file.obj\"",
  1473. "       set multiplot",
  1474. "       set origin x01,y01",
  1475. "       set size  xs,ys",
  1476. "       plot ...",
  1477. "            ...",
  1478. "       set origin x02,y02",
  1479. "       plot ...",
  1480. "       set nomultiplot",
  1481. "",
  1482. " See `set multiplot` for further information.",
  1483. "",
  1484. " The second version is the [x,y] option for the driver itself.  The advantage",
  1485. " of this implementation is that everything is scaled and placed automatically",
  1486. " without the need for setting origins and sizes; the graphs keep their natural",
  1487. " x/y proportions of 3/2 (or whatever is fixed by `set size`).",
  1488. "",
  1489. " If both multiplot methods are selected, the standard method is chosen and a",
  1490. " warning message is given.",
  1491. "",
  1492. " Examples of single plots (or standard multiplot):",
  1493. "       set terminal tgif                  # defaults",
  1494. "       set terminal tgif \"Times-Roman\" 24",
  1495. "       set terminal tgif landscape",
  1496. "       set terminal tgif landscape solid",
  1497. "",
  1498. " Examples using the built-in multiplot mechanism:",
  1499. "       set terminal tgif portrait [2,4]  # portrait; 2 plots in the x-",
  1500. "                                         # and 4 in the y-direction",
  1501. "       set terminal tgif [1,2]           # portrait; 1 plot in the x-",
  1502. "                                         # and 2 in the y-direction",
  1503. "       set terminal tgif landscape [3,3] # landscape; 3 plots in both",
  1504. "                                         # directions"
  1505. END_HELP(tgif)
  1506. #endif
  1507. /*{{{}}}*/
  1508.